1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : ressourcen/classes/filemanager/class.folder.inc.php
5 : - Modulgruppe: File Manager
6 : - Beschreibung: Klasse "Folder"
7 : - Version: 0.4, 08.01.08
8 : - Autor(en): Tobias Wild <tobias.wild@mni.fh-giessen.de>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 :
24 : if (!defined("PATH_TO_ROOT")) {
25 : define("PATH_TO_ROOT", "../../../");
26 : }
27 :
28 : require_once (PATH_TO_ROOT.
29 : "ressourcen/classes/class.ressourcendb.inc.php");
30 : require_once (PATH_TO_ROOT.
31 : "ressourcen/classes/class.filemanger.inc.php");
32 : require_once (PATH_TO_ROOT.
33 : "ressourcen/classes/filemanager/class.resource.inc.php");
34 : require_once (PATH_TO_ROOT.
35 : "ressourcen/classes/archiver/interface.resourcevisitor.inc.php");
36 : require_once (PATH_TO_ROOT.
37 : "user/classes/class.usertools.inc.php");
38 : //
39 : class Folder extends Resource {
40 : /// Klassen-Attribute
41 : private $parentFolder = null;
42 : private $folders = array();
43 :
44 : private $files;
45 :
46 : private static $iconTypes = array();
47 : private $layerType;
48 : private $folderType;
49 : private $folderState;
50 : private $studentWrite;
51 : private $fileCounter = 0;
52 : private $linkCounter = 0;
53 :
54 : public function __construct($fileID = 0) {
55 0 : $this->fileID = $fileID;
56 :
57 0 : global $visibleTxt, $visibleIcons;
58 :
59 0 : $visibleTxt = array();
60 0 : $visibleIcons = array();
61 0 : $imgFolder = PATH_TO_ROOT.'ressourcen/icons/';
62 0 : $visibleTxt[1] = " für alle sichtbar";
63 0 : $visibleTxt[2] = " nur für Dozenten & Tutoren sichtbar";
64 0 : $visibleTxt[3] = " nur für Dozenten sichtbar";
65 : //Icons für Sichtbarkeit von Ordnern/Links/Dateien
66 0 : $visibleIcons[1] = "<img src='".$imgFolder."edittypes/view_Student.gif' alt='visibilityAll Symbol' />";
67 0 : $visibleIcons[2] = "<img src='".$imgFolder."edittypes/view_noStudent.gif' alt='visibilityNoStudents Symbol' />";
68 0 : $visibleIcons[3] = "<img src='".$imgFolder."edittypes/view_Dozent.gif' alt='visibilityDocentsOnly Symbol' />";
69 :
70 : // Foldersymbole und Struktursymbole fuer Verzeichnisbaum (CSS Klassen)
71 0 : if (empty(self::$iconTypes)) self::$iconTypes =
72 : array(
73 0 : 0 => 'ricon_rootFolder',
74 0 : 1 => 'ricon_folderOpen',
75 0 : 2 => 'ricon_folderClosed',
76 0 : 3 => 'ricon_join',
77 0 : 4 => 'ricon_joinBottom',
78 0 : 5 => 'ricon_line',
79 0 : 6 => 'ricon_minus',
80 0 : 7 => 'ricon_minusBottom',
81 0 : 8 => 'ricon_plus',
82 0 : 9 => 'ricon_plusBottom',
83 0 : 10 => 'ricon_empty',
84 0 : 11 => 'ricon_foyerFolder',
85 0 : 12 => 'ricon_mostpopular',
86 : 13 => 'ricon_mostrecent'
87 0 : );
88 :
89 0 : }
90 :
91 : public function setFolderState($folderState) {
92 0 : $this->folderState = $folderState;
93 0 : }
94 :
95 : public function setLayerType($layerType) {
96 0 : $this->layerType = $layerType;
97 0 : }
98 :
99 : public function setStudentWrite($studentWrite) {
100 0 : $this->studentWrite = $studentWrite;
101 0 : }
102 :
103 : public function setFolderType($folderType) {
104 0 : $this->folderType = $folderType;
105 0 : }
106 :
107 : public function getFolderState() {
108 0 : return $this->folderState;
109 : }
110 :
111 : public function setParentFolder($folder) {
112 0 : $this->parentFolder = $folder;
113 0 : }
114 :
115 : public function getFileCounter() {
116 0 : return $this->fileCounter;
117 : }
118 :
119 : public function setFileCounter($fileCounter) {
120 0 : $this->fileCounter = $fileCounter;
121 0 : }
122 :
123 : public function getLinkCounter() {
124 0 : return $this->linkCounter;
125 : }
126 :
127 : public function setLinkCounter($linkCounter) {
128 0 : $this->linkCounter = $linkCounter;
129 0 : }
130 : /**
131 : * Getter for files of the folder.
132 : * This method loads at the first access the file list of the folder
133 : * and returns them.
134 : *
135 : * @return File[] File array
136 : */
137 : public function getFiles() {
138 0 : if (is_null($this->files)) {
139 0 : global $resDB;
140 :
141 0 : $desc = (isset($_GET['direction']) && $_GET['direction'] == 'DESC');
142 0 : $sqlSort = 'create_time';
143 :
144 :
145 0 : if ($this->fileID > 0) {
146 0 : $this->files = $resDB->getFiles($this->fileID, $sqlSort, $desc);
147 0 : } elseif ($this->fileID == "-1") {
148 0 : $this->files = $resDB->getMostRatedFiles();
149 0 : } elseif ($this->fileID == "-2") {
150 0 : $this->files = $resDB->getNewestFiles();
151 0 : }
152 0 : }
153 :
154 0 : return $this->files;
155 : }
156 :
157 : public function setFiles($files) {
158 0 : $this->files = $files;
159 0 : }
160 :
161 : /**
162 : * Getter for the subfolders.
163 : *
164 : * Fetchs the subfolders of this folder if not present
165 : * and returns them.
166 : *
167 : * @return Folder[] Folder array
168 : */
169 : public function getSubFolders() {
170 0 : $this->loadSubFolder();
171 :
172 0 : return $this->folders;
173 : }
174 :
175 : public function loadSubFolder() {
176 0 : global $resDB;
177 0 : if (empty($this->folders)) $this->folders = $resDB->getSubFolder($this);
178 0 : }
179 :
180 : public function isActiveFolder() {
181 0 : return (!is_null($this->fileManager) &&
182 0 : $this->fileManager->getActiveFolder() == $this->fileID);
183 : }
184 :
185 : public function getFolderCount($recursive = true) {
186 0 : $this->loadSubFolder();
187 0 : $count = count($this->folders);
188 0 : if ($recursive) {
189 0 : foreach ($this->folders as $folder) {
190 0 : $count += $folder->getFolderCount(true);
191 0 : }
192 0 : }
193 0 : return $count;
194 : }
195 :
196 : private function isLastFolder($fileID = null) {
197 0 : if (is_null($fileID)) {
198 0 : if (is_a($this->parentFolder, "Folder")) {
199 0 : return $this->parentFolder->isLastFolder($this->fileID);
200 : }
201 0 : } else {
202 0 : $lastFolder = end($this->folders);
203 0 : if (is_a($lastFolder, "Folder")) {
204 0 : return ($lastFolder->getID() == $fileID);
205 : }
206 : }
207 0 : return false;
208 : }
209 :
210 : public function printSubFolder($layer = '') {
211 0 : global $db;
212 0 : $this->loadSubFolder();
213 0 : $lineLayer = $layer."<img src='".PATH_TO_ROOT.
214 0 : "images/transparent.gif' alt='lineLayer' class='".
215 0 : self::$iconTypes[5]."'/>";
216 0 : $emptyLayer = $layer."<img src='".PATH_TO_ROOT.
217 0 : "images/transparent.gif' alt='emptyLayer' class='".
218 0 : self::$iconTypes[10]."'/>";
219 0 : $newLayer = $lineLayer;
220 0 : $lastFolder = $this->isLastFolder();
221 0 : if ($lastFolder) {
222 0 : $newLayer = $emptyLayer;
223 0 : $plus = 9;
224 0 : $minus = 7;
225 0 : $join = 4;
226 0 : $bottom = true;
227 0 : } else {
228 0 : $plus = 8;
229 0 : $minus = 6;
230 0 : $join = 3;
231 0 : $bottom = false;
232 : }
233 0 : if (is_null($this->parentFolder)) {
234 0 : $newLayer = "";
235 0 : }
236 0 : $gesamtReturn = "";
237 0 : $subReturn = "";
238 :
239 0 : foreach($this->folders as $key => $subFolder) {
240 0 : $subReturn .= $subFolder->printSubFolder($newLayer);
241 0 : }
242 :
243 0 : if (!is_null($this->parentFolder)) {
244 0 : if ($this->fileManager->getAction() == 'foldOut' &&
245 0 : $this->fileManager->getActionID() == $this->fileID) {
246 0 : RessourcenDB::saveFolderState($this);
247 0 : }
248 0 : if ($this->folderState) {
249 0 : $this->layerType = $minus;
250 0 : if (!$subReturn) $this->layerType = $join;
251 0 : } else {
252 0 : $this->layerType = $plus;
253 0 : if (!$subReturn) $this->layerType = $join;
254 0 : $subReturn = false;
255 : }
256 : // Unterschiedliche Ordnersymbole fuer Foyerordner und Kursordner
257 0 : $this->folderType = 1;
258 0 : if ($this->courseID == 0) $this->folderType = 11;
259 : else if (
260 0 : $this->parentFolder->getID() == 0
261 0 : )
262 0 : $this->folderType = 0;
263 0 : $gesamtReturn.= $this->drawFolder($layer).$subReturn;
264 0 : } else {
265 0 : $gesamtReturn = $subReturn;
266 : }
267 :
268 0 : return $gesamtReturn;
269 : }
270 :
271 : public function drawFolder($layer = '', $showCount = true) {
272 0 : $fileID = $this->fileID;
273 0 : $folderType = $this->folderType;
274 0 : $layerType = $this->layerType;
275 0 : $folderLink = Data::toHTML($this->link, false);
276 : // Zaehlt die enthaltenen Elemente
277 :
278 0 : global $resDB;
279 0 : if ($showCount) {
280 0 : if ($this->folderState) {
281 0 : $subCount = $resDB->countSubElements($fileID, false);
282 0 : } else {
283 0 : $subCount = $resDB->countSubElements($fileID, true);
284 : }
285 0 : $folderLink .= " (".$subCount.")";
286 0 : }
287 0 : $folderName = Data::toHTML($this->name, false);
288 : // Es wird ein geoeffneter Ordner angezeigt, wenn kein foyer, root oder mostratet Ordner
289 0 : if ($this->isActiveFolder() && $folderType != 0 && $folderType < 11) {
290 0 : $folderType = 1;
291 0 : } elseif ($folderType != 0 && $folderType < 11) {
292 0 : $folderType = 2;
293 0 : }
294 0 : $htmlLayer = $layer;
295 0 : $htmlLayerLinkBegin = "<a href='".self::createLink(
296 0 : 1, array('action' => 'foldOut', 'actionID' => $fileID)
297 0 : ) ."'>";
298 0 : $htmlLayerImage = "<img src='".PATH_TO_ROOT.
299 0 : "images/transparent.gif' alt='layerImage' class='".
300 0 : self::$iconTypes[$layerType]."' />";
301 0 : $htmlLayerLinkEnd = "</a>";
302 : $htmlFolderLinkBegin = "<a class='folder' href='".
303 0 : self::createLink(
304 0 : 1, array('activeFolder' => $fileID, 'action' => '', 'actionID' => '', 'mode' => '')
305 0 : )
306 0 : ."' title=\"".$folderName."\">";
307 0 : $htmlFolderImage = "<img src='".PATH_TO_ROOT.
308 : "images/transparent.gif' alt='Verzeichnis-Symbol' class='"
309 0 : .self::$iconTypes[$folderType]."' />"
310 0 : .$folderLink;
311 0 : $htmlFolderLinkEnd = "</a>";
312 : // Wenn Aktiver Ordner HinterGrundFarbe aendern
313 0 : $folderClass = ($this->isActiveFolder() ?
314 0 : "res_folderselect" : "res_folder");
315 : // Wenn kein plus oder minus angezeigt
316 : //wird soll auch kein Link gesetzt werden
317 0 : if ($layerType == 3 || $layerType == 4) {
318 0 : $htmlLayerLinkBegin = "";
319 0 : $htmlLayerLinkEnd = "";
320 0 : }
321 0 : $return = "<div class='".$folderClass." nobr'>".
322 0 : $htmlLayer.$htmlLayerLinkBegin.
323 0 : $htmlLayerImage.$htmlLayerLinkEnd.
324 0 : $htmlFolderLinkBegin.$htmlFolderImage.
325 0 : $htmlFolderLinkEnd."</div>";
326 0 : return $return;
327 : }
328 :
329 : public function getUserIcons() {
330 : $action = isset(
331 0 : $_GET['action']
332 : )
333 0 : ? $_GET['action'] : '';
334 : $actionID = isset(
335 0 : $_GET['actionID']
336 : )
337 0 : ? $_GET['actionID'] : '';
338 0 : $course = $_SESSION['course'];
339 0 : $activeFolder = isset($_GET['activeFolder']) ? $_GET['activeFolder'] : 0;
340 0 : global $db, $visibleTxt, $visibleIcons, $settings;
341 0 : $imgFolder = $this->fileManager->getImgFolder();
342 0 : $folderUserID = $this->userID;
343 0 : $folderWrite = $this->studentWrite;
344 :
345 : // Definition der Bilder zum Bearbeiten des Ordners
346 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
347 0 : $editFolder = "<img title='Ordnereigenschaften editieren' src='".
348 0 : $imgFolder."edittypes/lock_edit.gif' alt='lock edit Symbol'/>";
349 : else $editFolder = "<img title='Ordnereigenschaften editieren' src='".
350 0 : PATH_TO_ROOT."images/transparent.gif' ".
351 0 : "class='icon_lock_edit' alt='lock edit Symbol'/>";
352 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
353 0 : $deleteFolder = "<img title='Ordner inklusive Dateien löschen' src='".
354 0 : $imgFolder."edittypes/lock_delete.gif' alt='lock delete Symbol' />";
355 : else $deleteFolder = "<img title='Ordner inklusive Dateien löschen' src='".
356 0 : PATH_TO_ROOT."images/transparent.gif' class='icon_lock_delete' ".
357 0 : "alt='lock delete Symbol' />";
358 :
359 0 : if ($settings['filemanager_recursive']) {
360 : $recursiveDownloadFolder = "<img title='Ordner als recursives Archiv herunterladen ' src='".
361 0 : $imgFolder."edittypes/lock_recursive_archive_download.gif' alt='lock recursive download Symbol' />";
362 0 : } else {
363 0 : $recursiveDownloadFolder = "";
364 : }
365 :
366 : $downloadFolder = "<img title='Ordner als Archiv herunterladen ' src='".
367 0 : $imgFolder."edittypes/lock_archive_download.gif' alt='lock download Symbol' />";
368 :
369 0 : $folderVisible = "";
370 :
371 0 : if (($_SESSION['usergroup'] == ADMIN ||
372 0 : ($_SESSION["usergroup"] == DOZENT &&
373 0 : $_SESSION["course"] > 0) ||
374 0 : (isset($folderUserID) &&
375 0 : $_SESSION['userid'] == $folderUserID)) && $activeFolder > 0) {
376 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
377 0 : $editFolder = "<a title='Ordnereigenschaften verändern' href='./edit.php?editID=".
378 0 : $activeFolder."'><img src='".$imgFolder."edittypes/edit.gif' alt='Bearbeiten' /></a>";
379 : else $editFolder = "<a title='Ordnereigenschaften verändern' href='./edit.php?editID=".
380 0 : $activeFolder."'><img src='".PATH_TO_ROOT.
381 0 : "images/transparent.gif' class='icon_edit_folder' alt='Bearbeiten' /></a>";
382 0 : if(isset($_SESSION["UserStyle"]) && $_SESSION["UserStyle"] != "fh_yaml")
383 0 : $deleteFolder = "<a title='Ordner löschen' href='".
384 0 : $this->createLink(
385 0 : 1, array("action" => "deleteFolder", "actionID" => $activeFolder)
386 0 : )
387 0 : ."'><img src='".$imgFolder."edittypes/delete.gif' alt='Löschen' /></a>";
388 : else $deleteFolder = "<a title='Ordner löschen' href='".
389 0 : $this->createLink(
390 0 : 1, array(
391 0 : "action" => "deleteFolder",
392 0 : "actionID" => $activeFolder)
393 0 : )
394 0 : ."'><img src='".PATH_TO_ROOT.
395 0 : "images/transparent.gif' ".
396 0 : "class='icon_delete_folder' ".
397 0 : "alt='Löschen' /></a>";
398 :
399 : //Sichtbarkeitsanzeige für aktuellen Ordner setzen
400 0 : $visibleIcon = "";
401 : //beim Laden der Seite
402 0 : if (isset($this->visibleType) &&
403 0 : $this->visibleType >= 1 &&
404 0 : $this->visibleType <= 3) {
405 0 : $visibleIcon = $visibleIcons[$this->visibleType];
406 0 : }
407 : $folderVisible = "<a title='Sichtbarkeit dieses Ordners ändern' href='".
408 0 : $this->createLink(
409 0 : 0,array(
410 0 : 'activeFolder' => $activeFolder,'action' => "setFolderVisibility","actionID" => $activeFolder
411 0 : )
412 0 : )
413 0 : ."'>".$visibleIcon."</a>";
414 0 : }
415 0 : if (($_SESSION['usergroup'] == ADMIN ||
416 0 : ($_SESSION["usergroup"] == DOZENT &&
417 0 : $_SESSION["course"] > 0)) &&
418 0 : $activeFolder > 0) {
419 0 : if (($folderWrite &&
420 0 : !($action == "studentWriteFolder" &&
421 0 : $actionID == $activeFolder)) ||
422 0 : (!$folderWrite && $action == "studentWriteFolder"
423 0 : && $actionID == $activeFolder)) {
424 0 : if(isset($_SESSION["UserStyle"]) &&
425 0 : $_SESSION["UserStyle"] != "fh_yaml")
426 0 : $studentenWriteFolder= "<a title='Studenten Schreibrechte entziehen' href='".
427 0 : $this->createLink(
428 0 : 1,
429 : array(
430 0 : "action" => "studentWriteFolder",
431 : "actionID" => $activeFolder
432 0 : )
433 0 : )
434 0 : ."'><img src='".$imgFolder.
435 0 : "edittypes/student_write.gif' ".
436 0 : "alt='Studenten Schreibrechte entziehen' /></a>";
437 : else $studentenWriteFolder= "<a title='Studenten Schreibrechte entziehen' href='".
438 0 : $this->createLink(
439 0 : 1,
440 : array(
441 0 : "action" => "studentWriteFolder",
442 : "actionID" => $activeFolder
443 0 : )
444 0 : )
445 0 : ."'><img src='".PATH_TO_ROOT."images/transparent.gif' ".
446 0 : "class='icon_remove_student_write' ".
447 0 : "alt='Studenten Schreibrechte entziehen' /></a>";
448 0 : } else {
449 0 : if(isset($_SESSION["UserStyle"]) &&
450 0 : $_SESSION["UserStyle"] != "fh_yaml")
451 0 : $studentenWriteFolder= "<a title='Studenten Schreibrechte geben' href='".
452 0 : $this->createLink(
453 0 : 1, array(
454 0 : "action" => "studentWriteFolder",
455 : "actionID" => $activeFolder
456 0 : )
457 0 : )
458 0 : ."'><img src='".$imgFolder.
459 0 : "edittypes/lock_student_write.gif' ".
460 0 : "alt='Studenten Schreibrechte geben' /></a>";
461 : else $studentenWriteFolder= "<a title='Studenten Schreibrechte geben' href='".
462 0 : $this->createLink(
463 0 : 1,
464 : array(
465 0 : "action" => "studentWriteFolder",
466 : "actionID" => $activeFolder
467 0 : )
468 0 : )
469 0 : ."'><img src='".PATH_TO_ROOT.
470 0 : "images/transparent.gif' class='icon_give_student_write' ".
471 0 : "alt='Studenten Schreibrechte geben' /></a>";
472 : }
473 0 : } else {
474 0 : if (isset($folderWrite) && $folderWrite) {
475 0 : if(isset($_SESSION["UserStyle"]) &&
476 0 : $_SESSION["UserStyle"] != "fh_yaml")
477 0 : $studentenWriteFolder= "<img src='".
478 0 : $imgFolder.
479 0 : "edittypes/student_write.gif' ".
480 0 : "title='Studenten haben Schreibrechte' ".
481 0 : "alt='Studenten haben Schreibrechte' />";
482 : else $studentenWriteFolder= "<img src='".
483 0 : PATH_TO_ROOT."images/transparent.gif' ".
484 0 : "class='icon_student_write' ".
485 0 : "title='Studenten haben Schreibrechte' ".
486 0 : "alt='Studenten haben Schreibrechte' />";
487 0 : } else {
488 0 : if(isset($_SESSION["UserStyle"]) &&
489 0 : $_SESSION["UserStyle"] != "fh_yaml")
490 0 : $studentenWriteFolder= "<img src='".$imgFolder.
491 0 : "edittypes/lock_student_write.gif' ".
492 0 : "title='Studenten haben keine Schreibrechte' ".
493 0 : "alt='Studenten haben keine Schreibrechte' />";
494 : else $studentenWriteFolder= "<img src='".
495 0 : PATH_TO_ROOT."images/transparent.gif' ".
496 0 : "class='icon_lock_student_write' ".
497 0 : "title='Studenten haben keine Schreibrechte' ".
498 0 : "alt='Studenten haben keine Schreibrechte' />";
499 : }
500 : }
501 :
502 0 : if (ZipProvider::checkArchiveSize($this, false) <=
503 0 : $settings['filemanager_archive_max_filesize']*1024*1024) {
504 :
505 0 : if (($this->fileCounter + $this->linkCounter) > 0) {
506 : $downloadFolder = "<a title='Ordner als Archiv herunterladen' href='".
507 0 : $this->createLink(
508 0 : 1,
509 : array(
510 0 : "action" => "downloadFolder",
511 : "actionID" => $activeFolder
512 0 : )
513 0 : ) . "'><img src='".$imgFolder.
514 0 : "edittypes/archive_download.gif' ".
515 0 : "alt='Herunterladen' /></a>";
516 0 : }
517 0 : } else {
518 : $downloadFolder = "<img title='Maximale Dateigröße überschritten' src='".
519 0 : $imgFolder."edittypes/lock_archive_download.gif' ".
520 0 : "alt='lock download Symbol' />";
521 : }
522 :
523 0 : if ($settings['filemanager_recursive'] == true) {
524 :
525 0 : if (ZipProvider::checkArchiveSize($this, true) <=
526 0 : $settings['filemanager_archive_max_filesize']*1024*1024) {
527 0 : if ((($this->fileCounter + $this->linkCounter) > 0) ||
528 0 : $this->hasFilesInSubFolders()) {
529 : $recursiveDownloadFolder = "<a title='Ordner als ".
530 0 : "recursives Archiv herunterladen' href='".
531 0 : $this->createLink(
532 0 : 1,
533 : array(
534 0 : "action" => "recursiveDownloadFolder",
535 : "actionID" => $activeFolder
536 0 : )
537 0 : )
538 0 : ."'><img src='".$imgFolder.
539 0 : "edittypes/recursive_archive_download.gif' ".
540 0 : "alt='Recursiv Herunterladen' /></a>";
541 0 : }
542 0 : } else {
543 : $recursiveDownloadFolder = "<img ".
544 0 : "title='Maximale Dateigröße überschritten' src='".
545 0 : $imgFolder."edittypes/lock_recursive_archive_download.gif' ".
546 0 : "alt='lock recursive download Symbol' />";
547 : }
548 0 : }
549 0 : if ($activeFolder == 0) {
550 : // Bestimmte Icons auslassen
551 0 : $downloadFolder = "";
552 0 : $editFolder = "";
553 0 : $folderVisible = "";
554 0 : $deleteFolder = "";
555 0 : }
556 :
557 : return $downloadFolder .
558 0 : $recursiveDownloadFolder .
559 0 : $editFolder .
560 0 : $folderVisible .
561 0 : $studentenWriteFolder.
562 0 : $deleteFolder;
563 : }
564 :
565 : /**
566 : * Test which subfolders exists and containing files.
567 : *
568 : * @return Boolean Subfolders which are not empty
569 : */
570 : public function hasFilesInSubFolders() {
571 0 : $folders = $this->getSubFolders();
572 :
573 0 : foreach ($folders as $folder) {
574 0 : if ((count($folder->getFiles()) > 0) ||
575 0 : $folder->hasFilesInSubFolders()) {
576 0 : return TRUE;
577 : }
578 0 : }
579 0 : }
580 :
581 : /**
582 : * Generiert die Filelist, und gibt sie aus
583 : *
584 : * @access public
585 : */
586 : public function showFiles($statisticView = false) {
587 0 : global $db, $settings;
588 : // INIT
589 :
590 0 : $templateFileList = ($statisticView) ?
591 0 : new Template(PATH_TO_ROOT .
592 0 : "/ressourcen/templates/filelist_statistic.html")
593 0 : : new Template(PATH_TO_ROOT .
594 0 : "/ressourcen/templates/filelist.html");
595 0 : global $visibleTxt;
596 0 : $time = time();
597 0 : $action = isset($_GET['action']) ? $_GET['action'] : '';
598 0 : $actionID = isset($_GET['actionID']) ? $_GET['actionID'] : '';
599 0 : $course = $_SESSION['course'];
600 0 : $activeFolder = $_GET['activeFolder'];
601 0 : $imgFolder = $this->fileManager->getImgFolder();
602 0 : $cellOne = $cell = 'tableCellDark';
603 : // AnfangsKlasse fuer Tabellenzeile, wechselt
604 0 : $cellTwo = 'tableCell';
605 0 : $cols = 6; // Anzahl der Spalten fuer Colspan
606 : // SichtbarkeitsTexte
607 0 : $visible = "";
608 :
609 : // sql_add = this -> getVisibilityConstraintSQL()
610 0 : $topOrdner = Data::toHTML($this->link, false);
611 0 : if ($activeFolder > 0) {
612 0 : $folderUserID = $this->userID;
613 0 : $user = $db->get_row(
614 0 : "SELECT Vorname, Nachname, gender FROM user WHERE ID='
615 0 : $folderUserID'"
616 0 : );
617 0 : $folderVisible = $this->visibleType;
618 0 : $folderCreate = Output::echoDate(
619 0 : "d.m.Y H:i",(int)$this->createTime
620 0 : );
621 0 : $folderUser = "";
622 0 : if ($user != null) {
623 0 : $courseID = $_SESSION["course"];
624 0 : $groupName = UserTools::getUserGroupName(
625 0 : $folderUserID, $courseID
626 0 : );
627 0 : $userName = $user->Vorname." ".$user->Nachname . " ($groupName)";
628 0 : $folderUser = "<a href='".PATH_TO_ROOT.
629 0 : "user/homepage.php?user=$folderUserID'>".
630 0 : Data::toHTML($userName, false) ."</a>";
631 : if (
632 0 : $role = RoleArtefacts::getRoleForItem(RESSOURCE, (int)$activeFolder)) {
633 : $folderUser.= " (".
634 0 : $role->getPropertiesLink(
635 0 : $role->getName($user->gender)
636 0 : )
637 0 : .")";
638 0 : }
639 0 : if ($team = TeamArtefacts::getTeamForItem(RESSOURCE, (int)$activeFolder)) {
640 0 : $folderUser.= " (".Data::toHTML($team->getName(), false) .")";
641 0 : }
642 0 : }
643 0 : $folderWrite = $this->studentWrite;
644 0 : }
645 :
646 : //Sortierreihenfolge
647 0 : if (isset($_GET['direction'])) {
648 : //Wird der Sortier Knopf gedrückt wird
649 : //geschaut ob DESC oder ASC
650 0 : $desc = ($_GET['direction'] == 'DESC');
651 0 : }
652 : else{
653 : //Bei Klick auf Dateien/Links
654 0 : $desc = true;
655 : }
656 :
657 0 : $sqlSort = 'create_time';
658 0 : if ($action == 'sort' && in_array($actionID, array("name", "size", "create_time", "userID", "counter"))) {
659 0 : $sqlSort = $actionID;
660 0 : }
661 0 : global $resDB;
662 0 : if ($activeFolder > 0) {
663 0 : $this->files = $resDB->getFiles($activeFolder, $sqlSort, $desc);
664 0 : } elseif ($activeFolder == "-1") {
665 0 : $this->files = $resDB->getMostRatedFiles();
666 0 : } elseif ($activeFolder == "-2") {
667 0 : $this->files = $resDB->getNewestFiles();
668 0 : }
669 :
670 : // Fuer OrdnerDownload werden Richtige Files gebraucht
671 0 : $linkCounter = $fileCounter = $sizeCounter = 0;
672 0 : foreach($this->files as $file) {
673 0 : if ($file->isFileVisible()) {
674 0 : if ($file->getType() == 'link') $linkCounter++;
675 0 : elseif ($file->getType() == 'file') $fileCounter++;
676 0 : $sizeCounter = $sizeCounter+$file->getSize();
677 0 : }
678 0 : }
679 0 : $sizeCounter = Format::FilesizeStr($sizeCounter);
680 0 : $this->fileCounter = $fileCounter;
681 0 : $this->linkCounter = $linkCounter;
682 :
683 0 : if (isset($this->visibleType) &&
684 0 : $this->visibleType >= 1 &&
685 0 : $this->visibleType <= 3) {
686 0 : $visible = $visibleTxt[$this->visibleType];
687 0 : }
688 0 : $folderIcons = (!$statisticView) ? $this->getUserIcons() : "";
689 :
690 : // Blaue Ueberschrift
691 0 : $folderInfo = ($fileCounter+$linkCounter) .
692 0 : " Element".(($fileCounter+$linkCounter) != 1 ? "e" : "") .
693 0 : ", Ordner ".$visible;
694 :
695 0 : if ($activeFolder > 0 && strlen($folderUser) > 0) {
696 0 : $subHeader = "<div><small>Erstellt von $folderUser ".
697 0 : "am $folderCreate - $linkCounter Link".($linkCounter == 1 ? "" : "s") .
698 0 : ", $fileCounter Datei".($fileCounter == 1 ? "" : "en") .
699 0 : ", $sizeCounter total.</small><br/><br/></div>";
700 0 : } else {
701 0 : $subHeader = "<div><br/><br/></div>";
702 : }
703 0 : if ($this->fileID == $this->fileManager->getActionID())
704 0 : $subHeader .= $this->getFolderHTMLOption($action);
705 :
706 0 : if ($action != "sort") $this->fileManager->runAction($activeFolder, $cols);
707 : //Abfrage: wenn Folder nicht für aktuellen User sichtbar, dann continue
708 : // Auswertungsmethode wird fuer OrdnerOptionen aufgerufen.
709 :
710 0 : $tableTitles = array("resource" => "Ressource",
711 0 : "action" => "Aktion",
712 0 : "size" => "Größe",
713 0 : "created" => "Erstellt",
714 0 : "owner" => "Besitzer",
715 0 : "clicks" => "Klicks");
716 0 : if ($activeFolder < 0) {
717 : // Gibt die TitelZeile mit den Spalten Ueberschriften aus Ohne Sortierung fuer die TOP20 oder Neuesten 20
718 0 : $tableHead = $tableTitles;
719 0 : } else {
720 0 : $newDirection = ($desc ? "ASC" : "DESC");
721 : // Gibt die TitelZeile mit den Spalten Ueberschriften aus mit SOrtiermoeglichkeit
722 0 : $tableHead["resource"] = "<a href='".$this->createLink(
723 0 : 1, array('action' => 'sort', 'actionID' => 'name', 'direction' => $newDirection)
724 0 : )
725 0 : ."'>".$tableTitles["resource"]."</a>";
726 0 : $tableHead["action"] = $tableTitles["action"];
727 0 : $tableHead["size"] = "<a href='".$this->createLink(
728 0 : 1, array('action' => "sort", 'actionID' => "size", 'direction' => $newDirection
729 0 : )
730 0 : ) ."'>".$tableTitles["size"]."</a>";
731 0 : $tableHead["created"] = "<a href='".$this->createLink(
732 0 : 1, array('action' => "sort", 'actionID' => "create_time", 'direction' => $newDirection
733 0 : )
734 0 : ) ."'>".$tableTitles["created"]."</a>";
735 0 : $tableHead["owner"] = "<a href='".$this->createLink(
736 0 : 1, array('action' => "sort", 'actionID' => "userID", 'direction' => $newDirection
737 0 : )
738 0 : ) ."'>".$tableTitles["owner"]."</a>";
739 0 : $tableHead["clicks"] = "<a href='".$this->createLink(
740 0 : 1, array('action' => "sort", 'actionID' => "counter", 'direction' => $newDirection
741 0 : )
742 0 : ) ."'>".$tableTitles["clicks"]."</a>";
743 : }
744 :
745 0 : $fileListEntriesHTML = "";
746 0 : if ($this->files) {
747 0 : $fileListInfo = "";
748 0 : foreach($this->files as $file) {
749 : // ZellenKlasse wechselt bei jeder Zeile
750 0 : $cell = ($cell == $cellOne ? $cellTwo : $cellOne);
751 0 : $fileListEntriesHTML .= $file->getHTMLString($statisticView, $cell);
752 0 : if ($action != "sort") $this->fileManager->runAction(
753 0 : $file->getID(), $cols
754 0 : );
755 0 : }
756 :
757 0 : } else {
758 0 : $fileListInfo = "<div style='text-align: center'><br/><br/>Keine Dateien vorhanden.<br/><br/></div>";
759 : }
760 0 : eval ($templateFileList->getTemplate());
761 0 : }
762 :
763 : private function getFolderHTMLOption($option) {
764 0 : if ($option == "deleteFolder") {
765 0 : $template = new Template(
766 : PATH_TO_ROOT
767 0 : . "/ressourcen/templates/deletefolder.html"
768 0 : );
769 0 : $folderID = $this->fileManager->getActiveFolder();
770 0 : $html = "";
771 0 : eval ($template->getTemplate("html"));
772 0 : return $html;
773 : }
774 :
775 0 : if ($option == "setFolderVisibility") {
776 : return "<div class='res_file-extra'>"
777 0 : ."<a href='".$this->createLink(
778 0 : 0,
779 : array(
780 0 : 'activeFolder' => $this->fileManager->getActiveFolder(),
781 0 : "action" => "setRessourceVisibility",
782 0 : 'actionID' => $this->fileManager->getActionID(),
783 : 'mode' => 1
784 0 : )
785 0 : )
786 0 : ."'>Nur Ordner</a> "."<a href='".
787 0 : $this->createLink(
788 0 : 0,
789 : array(
790 0 : 'activeFolder' => $this->fileManager->getActiveFolder(),
791 0 : "action" => "setRessourceVisibility",
792 0 : 'actionID' => $this->fileManager->getActionID(),
793 : 'mode' => 2
794 0 : )
795 0 : )
796 0 : .""."'>Inhalt (rekursiv)</a> "."<a href='".
797 0 : $this->createLink(
798 0 : 0,
799 : array(
800 0 : 'activeFolder' => $this->fileManager->getActiveFolder(),
801 0 : "action" => "setRessourceVisibility",
802 0 : 'actionID' => $this->fileManager->getActionID(),
803 : 'mode' => 3
804 0 : )
805 0 : )
806 0 : .""."'>Ordner und Inhalt (rekursiv)</a> ".
807 0 : "<a href='".$this->createLink(
808 0 : 0,
809 : array(
810 0 : "activeFolder" => $this->fileManager->getActiveFolder())
811 0 : )
812 0 : ."'>Abbrechen</a>"."<span class='res_file-extra'>".
813 0 : Utilities::helpCode(701) ."</span>"."</div>";
814 : }
815 :
816 0 : if ($option == "setRessourceVisibility") {
817 0 : return $this->getRessourceVisibilityHTML();
818 : }
819 0 : }
820 :
821 : /**
822 : * Archiver accept method for ArchiveVisitor
823 : *
824 : * @param ArchiveVisitor $visitor Archive visitor
825 : * @param String $parentPath Parent path
826 : * @return Sting Parent path
827 : */
828 : public function archiverAccept(ResourceVisitor $visitor, $parentPath = "/") {
829 0 : assert($visitor instanceof ResourceVisitor);
830 :
831 0 : return $visitor->visit($this, $parentPath);
832 : }
|